#pragma once

#include <iostream>
#include <functional>                                                                  
    
// 表示一个函数类型。    
// func_t是一个接受两个整数参数并返回整数的函数类型    
typedef std::function<int(int, int)> func_t;    

// 任务类型: 用于生产者产生任务
class Task    
{    
public:    
    Task(){};    

    // 传入三个参数x,y，以及一个函数，task则执行func(x, y)    
    Task(int x, int y, func_t func):_x(x),_y(y),_func(func)    
    {}    
    
    // 用于执行任务。在函数体内部，会调用存储在 _func 中的函数对象，
    // 并将 _x 和 _y 作为参数传递给这个函数对象。
    // 最后 返回执行结果。
    int operator()()    
    {    
        return _func(_x,_y);    
    } 
       
public:
    // 用作函数参数
    int _x;
    int _y;
    func_t _func;
};    